Skip to content

34.6 pm2 部署

34.6.1 关于 pm2

pm2NodeJS 平台高级生产流程管理器,也是一个守护进程管理器,它能够管理和保持应用程序 7*24 小时在线。

pm2 优点:

  • 简单易用
  • 跨平台
  • 容器集成
  • 内置集群、负载均衡
  • 支持模块系统
  • 支持实时监测
  • 支持日志管理
  • 支持关键指标监控 ....

想了解更多 pm2 知识可查阅 https://pm2.keymetrics.io/

34.6.2 如何安装

  1. 系统安装 NodeJS 环境 https://nodejs.org/en/

相信大部分人电脑都已经安装。

  1. 通过 npmyarn 全局安装 pm2 工具

npm:

npm install pm2@latest -g  

yarn:

yarn global add pm2  

34.6.3 托管 .NET5/6/7/8/9 应用程序

34.6.3.1 非单文件/非独立发布模式

这种模式的特点就是需要服务器安装 .NET5/6/7/8 的环境

pm2 start --name xxx dotnet -- xxx.dll  

指定端口如需指定端口,可使用下列命令:

pm2 start --name xxx dotnet -- PMS.Web.Entry.dll --urls=https://localhost:8089  

# 如果出现 --urls 不能识别问题,可使用以下的方式  
pm2 start "dotnet PMS.Web.Entry.dll --urls=https://localhost:8089" --name xxx  

注意 -- 后面可以写完整的 dotnet 命令。

命令说明xxx.dll 为项目发布后的启动层名称。

--name 配置应用程序在 pm2 中的唯一标识。

终端说明注意:通过 -- 传递参数在 powershell 终端下无效,需要在 cmd 终端下才行。比如出现这样的错误:

34.6.3.2 单文件/独立发布模式

这种模式的特点就是无需服务器安装 .NET 任何环境,可查阅 单文件发布文档

pm2 start --name xxx PMS.Web.Entry.exe  

指定端口如需指定端口,可使用下列命令:

pm2 start --name xxx PMS.Web.Entry.exe -- --urls=https://localhost:8089  

注意 -- 后面可以写完整的 dotnet 命令。

命令说明xxx.exe 为项目发布后的启动层名称,如果名称包含 空格,则使用双引号包裹,如 "x xx.exe"

--name 配置应用程序在 pm2 中的唯一标识。

终端说明注意:通过 -- 传递参数在 powershell 终端下无效,需要在 cmd 终端下才行。

34.6.3.3 启用应用程序

执行上述命令后会显示启动成功日志,如:

PS C:\Users\bqrjsoft\Desktop\pms> pm2 start --name pms PMS.Web.Entry.exe  
[PM2] Starting C:\Users\bqrjsoft\Desktop\pms\PMS.Web.Entry.exe in fork_mode (1 instance)  
[PM2] Done.  
┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐  
│ id  │ name   │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │  
├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤  
│ 0   │ pms    │ default     │ N/A     │ fork    │ 41764    │ 0s     │ 0    │ online    │ 0%       │ 85.0mb   │ bqrjsoft │ disabled │  
└─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘  
PS C:\Users\bqrjsoft\Desktop\pms>  

关于端口ASP.NET Core 程序默认端口都是 5000,如 http://localhost:5000

34.6.3.4 json 配置/启动方式

pm2 部署也提供了非常简单的 json 配置方式,部署更简单,拓展性更强,不需要每次重复输入命令,如在项目启动项目下添加 pm2.json,并设置文件属性 内容始终复制

PMS/Web.Entry/pm2.json

{  
  "apps": {  
    "name": "唯一标识",  
    "script": "dotnet",  
    "exec_mode": "fork",  
    "error_file": "logs/err.log",  
    "out_file": "logs/out.log",  
    "merge_logs": true,  
    "log_date_format": "YYYY-MM-DD HH:mm:ss",  
    "min_uptime": "60s",  
    "max_restarts": 30,  
    "autorestart": true,  
    "restart_delay": "60",  
    "args": [  
      "PMS.Web.Entry.dll",  
      "--urls=http://*:5001"  
    ],  
    "env": {  
      "ASPNETCORE_ENVIRONMENT": "Production"  
    }  
  }  
}  

在发布后的文件目录下打开终端执行:

pm2 start pm2.json  

34.6.4 pm2 常见操作

34.6.4.1 实时监听运行状态

pm2 monit  

34.6.4.2 显示运行日志

pm2 logs  

34.6.4.3 查看应用信息

pm2 info pms  

注意,pms 为您配置的 --name 名称。

34.6.4.4 随机启动

pm2 startup  
pm2 save  

Windows 下随机启动可查阅 pm2-windows-startup

npm install pm2-windows-startup -g  
pm2-startup install  
pm2 save  

34.6.4.5 集群模式(负载均衡)

  • 非单文件/非独立发布模式
pm2 start "xxx.dll" -i max  

  • 单文件/独立发布模式
pm2 start xxx.exe -i max  

34.6.4.6 其他操作

// 重启应用  
pm2 restart app_name  

// 重载应用  
pm2 reload app_name  

// 停止应用  
pm2 stop app_name  

// 删除应用  
pm2 delete app_name  

更多 pm2 文档可查阅 https://pm2.keymetrics.io/docs/usage/quick-start/

34.6.5 中文日志乱码问题

当你通过 pm2 monit 查看进程状态或实时日志时,如果发现中文显示为乱码,这通常是因为终端的字符编码与日志文件的编码不匹配导致的。可通过下列方式设置终端编码。

特别注意请在 pm2 start 之前操作,如果已经执行了 pm2 start 命令,那么先执行 pm2 delete 应用名称 删除。等配置好下面操作后再执行 pm2 start

  • Unix/Linux/Mac OS 系统

在终端输入下面命令:

echo 'export LANG=zh_CN.UTF-8' >> ~/.bashrc  
echo 'export LC_ALL=zh_CN.UTF-8' >> ~/.bashrc  
source ~/.bashrc  

如果配置后依然无效,可关闭当前终端并打开一个新的终端窗口。

  • Windows PowerShell

打开 PowerShell 并执行以下命令:

chcp 65001  

对于旧版本的 Windows CMD 尚未支持,请使用 PowerShell

34.6.6 反馈与建议

与我们交流给 Furion 提 Issue